private Map<String, Object> getPayCodeByWeChat(PayCodeRequest payCodeRequest) {
log.info("获取微信二维码请求*******");
Map<String, Object> resultMap = new HashMap<String, Object>();
String currentUserID = null;
String orderID = null;
ResultParams makeCode = null;
BizContentByWeChatPay bizContent = null;
try {
orderID = payCodeRequest.getOrderID();
currentUserID = payCodeRequest.getCurrentUserID();
SystemConfig queryOneSystemConfig = orderPayService.queryOneSystemConfig("cm2_weChatAccount");
PayRecord queryOrderPayRecordByOrderID = orderPayService.queryPayRecordByOrderID(orderID);
if (null != queryOrderPayRecordByOrderID && OrderPayStatusEnum.PAID.getValue() == queryOrderPayRecordByOrderID.getPayStatus()) {
log.info("支付的类型:" + queryOrderPayRecordByOrderID.getPayType());
log.debug("订单已存在支付过记录");
resultMap.put("code", -20003);
resultMap.put("desc", "订单已支付,无法再次操作");
return resultMap;
}
bizContent = new BizContentByWeChatPay();
String payAmount = payCodeRequest.getPayAmount().replace(",", "");
bizContent.setBody(payCodeRequest.getValidityPeriod());
bizContent.setNonce_str(CommonUtils.genId());
bizContent.setOut_trade_no(CommonUtils.genPayId());
bizContent.setSubject(payCodeRequest.getProductName());
bizContent.setTotal_amount(new BigDecimal(payAmount));
String configValue = queryOneSystemConfig.getConfigValue();
makeCode = WeChatPayUtil.makeCode(configValue, bizContent);
if (null == makeCode || !makeCode.getReturn_code().equals("SUCCESS") || !makeCode.getResult_code().equals("SUCCESS")) {
resultMap.put("code", -20018);
resultMap.put("desc", "获取微信支付二维码失败");
payLogService.createPayLog(currentUserID, new Gson().toJson(bizContent), orderID, new Gson().toJson(makeCode), -1);
return resultMap;
}
queryOneSystemConfig = orderPayService.queryOneSystemConfig("qrCodebyAddress");
String code_url = makeCode.getCode_url();
// 生成二维码
String base64Code = QRCodeUtil.getBase64Code(code_url);
// 有记录,且非已支付
if (null != queryOrderPayRecordByOrderID) {
queryOrderPayRecordByOrderID.setOrderID(payCodeRequest.getOrderID());
queryOrderPayRecordByOrderID.setPayType(OrderPayTypeEnum.WECHAT.getValue());
queryOrderPayRecordByOrderID.setSign(makeCode.getSign());
queryOrderPayRecordByOrderID.setEditor(payCodeRequest.getCurrentUserID());
queryOrderPayRecordByOrderID.setEditTime(new Date());
queryOrderPayRecordByOrderID.setPayStatus(OrderPayStatusEnum.UNPAID.getValue());
queryOrderPayRecordByOrderID.setQr_code(code_url);
queryOrderPayRecordByOrderID.setNonce_str(bizContent.getNonce_str());
queryOrderPayRecordByOrderID.setReturn_nonce_str(makeCode.getNonce_str());
long longValue = (new BigDecimal(payAmount).multiply(new BigDecimal("100"))).longValue();
queryOrderPayRecordByOrderID.setPayAmount(longValue);
queryOrderPayRecordByOrderID.setPrepay_id(makeCode.getPrepay_id());
queryOrderPayRecordByOrderID.setTrade_type(makeCode.getTrade_type());
queryOrderPayRecordByOrderID.setOut_trade_no(bizContent.getOut_trade_no());
orderPayService.updateOrderPayRecord(queryOrderPayRecordByOrderID);
} else {
PayRecord payRecord = new PayRecord();
payRecord.setOrderID(payCodeRequest.getOrderID());
payRecord.setPayType(OrderPayTypeEnum.WECHAT.getValue());
payRecord.setSign(makeCode.getSign());
payRecord.setOperator(payCodeRequest.getCurrentUserID());
payRecord.setCreateTime(new Date());
payRecord.setPayStatus(OrderPayStatusEnum.UNPAID.getValue());
long longValue = (new BigDecimal(payAmount).multiply(new BigDecimal("100"))).longValue();
payRecord.setPayAmount(longValue);
payRecord.setQr_code(code_url);
payRecord.setNonce_str(bizContent.getNonce_str());
payRecord.setReturn_nonce_str(makeCode.getNonce_str());
payRecord.setPrepay_id(makeCode.getPrepay_id());
payRecord.setTrade_type(makeCode.getTrade_type());
payRecord.setOut_trade_no(bizContent.getOut_trade_no());
orderPayService.createOrderPayRecord(payRecord);
}
resultMap.put("code", 0);
resultMap.put("desc", "获取成功");
resultMap.put("data", base64Code);
resultMap.put("out_trade_no", bizContent.getOut_trade_no());
payLogService.createPayLog(currentUserID, new Gson().toJson(bizContent), orderID, new Gson().toJson(makeCode), 0);
return resultMap;
} catch (Exception e) {
log.error("获取微信二维码处理异常*******", e);
resultMap.put("code", -20018);
resultMap.put("desc", "获取微信支付二维码失败");
payLogService.createPayLog(currentUserID, new Gson().toJson(bizContent), orderID, "获取微信二维码处理异常", 1);
return resultMap;
}
共有 0 - 微信扫码支付,回调和退款(附带完整代码)